package com.weixiaodong.ModelDesign.生成实例.builder模式.案例;

/**
 * 定义执行者
 *      传递不同的builder实现对应的操作：Text文本编写，Html文件编写
 */
@SuppressWarnings("all")
public class Director {
    private Builder builder;

    private Document document; // 封装被写入文件的相关信息

    public Director(Builder builder) {
        this.builder = builder;
    }

    public Director(Builder builder, Document document) {
        this.builder = builder;
        this.document = document;
    }

    /**
     * 默认的编辑方法---默认的是编辑的内容
     */
    public void construct() {
        builder.makeTitle("WelCome to Editor Tool");
        builder.makeString("In there, you can choose you want editor model to edit your think");
        builder.makeString("we provide two model at present:    ");
        builder.makeItems(new String[] {
                "text model",
                "html model"
        });
        builder.makeString("have fun");
        if (builder instanceof TEXTBuilder) {
            String document = ((TEXTBuilder) builder).getDocument();
            System.out.println(document);
        }
        builder.close();
    }

    /**
     * 指定编辑内容的方法  之所以选择使用构建者模式，是因为文本本身是一个较为复杂的对象，由：title， content，item组成
     * 所以我们可以通过构建者模式将这些内容隐藏起来，对外暴露接口供调用者使用，而不需要知道其中的实现细节，如果我们想进行扩展
     * @param document
     */
    public void construct(Document document) {
        builder.makeTitle(document.getTitle());
        for (String content : document.getContent()) {
            builder.makeString(content);
        }
        builder.makeItems(document.getItems());

        builder.close();
    }
}
